home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 140 / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin / tools / dshell / dsh333bs.lzh / realtime.c < prev    next >
C/C++ Source or Header  |  1999-07-11  |  2KB  |  109 lines

  1. /*
  2.     dshell    v3
  3.  
  4.     ファイル位置表示スケール直接操作
  5. */
  6.  
  7. #include    "dsh.h"
  8.  
  9.  
  10. int 
  11. Realtime_Scroll()
  12. {
  13.     int lp0, olp;
  14.     int dmx, dmy, mx, my, mbl, mbr;
  15.     int omx, omy;
  16.  
  17.     int start_pos = (RW_FULL-Rwin_len)/2;
  18.  
  19.  
  20.     if (start_pos) {
  21.         const char bar_pat[] = "□";    /* 何文字(バイト)でもよい! */
  22.         char bar[98];
  23.  
  24.         {
  25.             int i;
  26.  
  27.             bar[0] = '\0';
  28.             for (i = 0; i < 96 / (sizeof(bar_pat) - 1); i++) {    /* パターン生成 */
  29.                 strcat(bar, bar_pat);
  30.             }
  31.         }
  32.         B_LOCATE(0, start_pos);
  33.         B_PRINT((uchar *) bar);
  34.         B_LOCATE(0, start_pos + Rwin_len + 1);
  35.         B_PRINT((uchar *) bar);
  36.  
  37.         if (!GMODE) {
  38.             fill(0, 16, 768, (start_pos) * 16, 2);
  39.             fill(0, (start_pos + Rwin_len + 2) * 16, 768, 496, 2);
  40.         }
  41.  
  42.     }
  43.  
  44.  
  45.     omx = omy = olp = -1;
  46.     lp0 = lp;
  47.     do {
  48.         dmspos(&mx, &my);
  49.         dmsstat(&dmx, &dmy, &mbl, &mbr);
  50.         if (496 <= my) {    /* マウス座標の読み込み */
  51.             lp = (mx - 528) * lpmx / 112 - (Rwin_len / 2);
  52.  
  53.             if (lp < 0) {
  54.                 lp = 0;
  55.             }
  56.             if (lp > lpmx - Rwin_len) {
  57.                 lp = lpmx - Rwin_len;
  58.             }
  59.         } else {
  60.             lp = lp0;
  61.         }
  62.  
  63.         if (olp != lp) {/* 座標が更新されていたら画面も更新する */
  64.             int i;
  65.  
  66.             for (i = start_pos; i < (start_pos + Rwin_len); i++) {
  67.                 p_lin(lp + i - start_pos, i);
  68.             }
  69.         }
  70.         if (omx != mx || olp != lp) {
  71.             p_fpt(2);
  72.         }
  73.         p_time(0);
  74.         omx = mx;
  75.         omy = my;
  76.         olp = lp;
  77.  
  78.     } while (mbl || mbr);
  79.  
  80.     lp -= start_pos;
  81.     if (lp < 0) {        /* 上方向補正 */
  82.         lp = 0;
  83.     }
  84.     if (lp > lpmx - 30) {    /* 下方向補正 */
  85.         lp = lpmx - 30;
  86.     }
  87.  
  88.     if (start_pos) {        /* バックスクリーンの復帰(真ん中からぼぉわぁ~っと) */
  89.         int i;
  90.  
  91.         for (i = 0; i < 15; i++) {
  92.  
  93.             if (!GMODE) {
  94.                 fill(0, (15 - i) * 16, 768, (16 - i) * 16, 0);
  95.             }
  96.             p_lin(lp + (14 - i), (14 - i));
  97.  
  98.             if (!GMODE) {
  99.                 fill(0, (16 + i) * 16, 768, (17 + i) * 16, 0);
  100.             }
  101.             p_lin(lp + (15 + i), (15 + i));
  102.         }
  103.     }
  104.  
  105.     p_fpt(1);
  106.  
  107.     return(lp);
  108. }
  109.